package com.holdtime.jtt809dataservice.common.domain;

import io.netty.channel.ChannelHandlerContext;

import java.util.concurrent.ConcurrentHashMap;

public class ChannelHandlerContextManager {
    /***
     * 主链路会话管理
     */
    ConcurrentHashMap<Object, ChannelHandlerContext> channelHandlerContexts = new ConcurrentHashMap<Object, ChannelHandlerContext>();
    /***
     * 从链路会话管理
     */
    ConcurrentHashMap<Object, ChannelHandlerContext> subChannelHandlerContexts = new ConcurrentHashMap<Object, ChannelHandlerContext>();
    /***
     * 对接上级平台主链路会话管理
     */
    ConcurrentHashMap<Object, ChannelHandlerContext> clientChannelHandlerContexts = new ConcurrentHashMap<>();
    /***
     * 对接上级平台从链路会话管理
     */
    ConcurrentHashMap<Object, ChannelHandlerContext> subClientChannelHandlerContexts = new ConcurrentHashMap<Object, ChannelHandlerContext>();

    private ChannelHandlerContextManager() {
    }

    private static ChannelHandlerContextManager channelHandlerContextManager = new ChannelHandlerContextManager();

    /**
     * 获取当前会话管理器
     *
     * @return
     */
    public static ChannelHandlerContextManager getCurrent() {
        return channelHandlerContextManager;
    }

    /**
     * 获取会话
     *
     * @param number 设备号
     * @return
     */
    public ChannelHandlerContext get(Object number) {
        return channelHandlerContexts.get(number);
    }

    /**
     * 存入会话
     *
     * @param number                设备号
     * @param channelHandlerContext 会话
     */
    public void put(Object number,
                    ChannelHandlerContext channelHandlerContext) {
        channelHandlerContexts.put(number, channelHandlerContext);
    }

    /**
     * 移除会话
     *
     * @param number 设备号
     */
    public void remove(Object number) {
        channelHandlerContexts.remove(number);
    }

    /**
     * 获取从链路会话
     *
     * @param number 设备号
     * @return
     */
    public ChannelHandlerContext getSub(Object number) {
        return subChannelHandlerContexts.get(number);
    }

    /**
     * 存入从链路会话
     *
     * @param number                设备号
     * @param channelHandlerContext 会话
     */
    public void putSub(Object number,
                       ChannelHandlerContext channelHandlerContext) {
        subChannelHandlerContexts.put(number, channelHandlerContext);
    }

    /**
     * 移除从链路会话
     *
     * @param number 设备号
     */
    public void removeSub(Object number) {
        subChannelHandlerContexts.remove(number);
    }

    /**
     * 获取连接上级平台主链路会话
     *
     * @param number 设备号
     * @return
     */
    public ChannelHandlerContext getClient(Object number) {
        return clientChannelHandlerContexts.get(number);
    }

    /**
     * 存入连接上级平台主链路会话
     *
     * @param number                设备号
     * @param channelHandlerContext 会话
     */
    public void putClient(Object number,
                          ChannelHandlerContext channelHandlerContext) {
        clientChannelHandlerContexts.put(number, channelHandlerContext);
    }

    /**
     * 移除连接上级平台主链路会话
     *
     * @param number 设备号
     */
    public void removeClient(Object number) {
        clientChannelHandlerContexts.remove(number);
    }

    /**
     * 获取连接上级平台从链路会话
     *
     * @param number 设备号
     * @return
     */
    public ChannelHandlerContext getClientSub(Object number) {
        return subClientChannelHandlerContexts.get(number);
    }

    /**
     * 存入连接上级平台从链路会话
     *
     * @param number                设备号
     * @param channelHandlerContext 会话
     */
    public void putClientSub(Object number,
                             ChannelHandlerContext channelHandlerContext) {
        subClientChannelHandlerContexts.put(number, channelHandlerContext);
    }

    /**
     * 移除连接上级平台从链路会话
     *
     * @param number 设备号
     */
    public void removeClientSub(Object number) {
        subClientChannelHandlerContexts.remove(number);
    }
}
